"""
属性的代理访问

问题：
    你想将某个实例的属性访问代理到内部另一个实例中去，目的可能是作为继承的一个替代方法或者实现代理模式。
解决方案：
    简单来说，代理是一种编程模式，它将某个操作转移给另外一个对象来实现。
"""


class StockInvestor:
    """
    股票投资人
    """

    def buy(self):
        print("StockInvestor 购买股票")

    def sell(self):
        print("StockInvestor 卖出股票")


class StockBrokerage:
    """
    股票券商
    """

    def __init__(self):
        self._investor = StockInvestor()

    def buy(self):
        print("StockBrokerage 代理 购买股票")
        self._investor.buy()

    def sell(self):
        print("StockBrokerage 代理 卖出股票")
        self._investor.sell()


def use_stock_brokerage():
    brokerage = StockBrokerage()
    brokerage.buy()
    brokerage.sell()
    # 输出结果：
    """
    StockBrokerage 代理 购买股票
    StockInvestor 购买股票
    StockBrokerage 代理 卖出股票
    StockInvestor 卖出股票
    """


if __name__ == '__main__':
    use_stock_brokerage()
